class Evaluacion::PremioController < ApplicationController

  def list
    @concurso = Concurso.find(params[:id])
    opciones = {}
    opciones[:concurso_id] = params[:id]
    
    if !perfil_nacional?
      opciones[:ejecutivo_id] = session[:user]
      
    end
    
    @evaluaciones = Evaluacion.paginate :page => params[:page], :per_page => DEFAULT_PER_PAGE, :conditions => opciones
    limite = @concurso.fecha_termino.next_month
    @allow_new = Time.now < limite
  end

  def new
    @concurso = Concurso.find(params[:id])

    @marcas = Array.new
    @concurso.concurso_premio_marcas.each do |m|
      @marcas << Familia.find(m.marca_id).nombre
    end

    @marcas_select = Hash.new
    @concurso.concurso_premio_marcas.each do |m|
      @marcas_select[Familia.find(m.marca_id).nombre] =  m.marca_id
    end

    @evaluacion = Evaluacion.new(:concurso_id => @concurso, :ejecutivo_id => session[:user])
    @evaluacion.evaluacion_premios << EvaluacionPremio.new
    centro = Centro.find(@concurso.centro)
    @participantes = centro.empleados
    
  end

  def show
    @evaluacion = Evaluacion.find(params[:id])
    @centro = Centro.find(@evaluacion.concurso.centro)

  end
  
  def index
    list
    render :action => "list", :id => params[:id]
  end
  
  def create
    #    evaluacion = params.reject! {|k,v| k == "evaluacion"}
    #    puntos = evaluacion.reject! {|k,v| k == "puntos"}
    
    @evaluacion = Evaluacion.new(params[:evaluacion])
    @evaluacion.ejecutivo_id = session[:user]
    @evaluacion.concurso_id = params[:id]
   
    if @evaluacion.save
      logger.debug "Evaluacion guardada."
      concurso = Concurso.find(params[:id])
      marcas = Array.new
      concurso.concurso_ventas.each do |m|
        marcas << m.marca_id
      end
      
      logger.debug "Recorrer evaluaciones ventas"
      @evaluacion.evaluacion_premios.each do |v|
        if pertenece_a_marca_bonificable?(marcas, v)
          logger.debug "Pertenece a marca bonificable"
          puntos_copas = 0
          puntos_botellas = 0
          puntos_total = 0
          concurso.concurso_ventas.each do |cv|
            if v.marca_id == cv.marca_id
              logger.debug "Calculo puntos bonificables"
              puntos_copas = v.venta_copas * cv.puntos_copa
              puntos_botellas = v.venta_botellas * cv.puntos_botella
              puntos_total = puntos_copas + puntos_botellas
              logger.debug "Total puntos #{puntos_total} por venta de marca #{v.marca_id}"
              nuevo_puntaje = PuntajeMesero.new(:operacion => PuntajeMesero::CARGO,
                :evaluacion_id => v.evaluacion_id, :empleado_id => v.participante_id,
                :puntos => puntos_total)
            
              logger.debug "guardar puntaje mesero"
              nuevo_puntaje.save!
            end
          end
        end
      end
      
      flash[:notice] = "La Evaluacion se agrego correctamente."
      redirect_to :action => "index", :id => params[:id]
      
    else
      @concurso = Concurso.find(params[:id])
      @marcas = Array.new
      @concurso.concurso_premio_marcas.each do |m|
        @marcas << Marca.find(m.marca_id)
      end
      @marcas_select = Familia.cuervo
      centro = Centro.find(@concurso.centro)
      @participantes = centro.empleados
      
      render :action => "new", :id => params[:id]      
      
    end
  end
  
  def pertenece_a_marca_bonificable?(marcas, evaluacion_venta)
    marcas.each do |m|
      if m == evaluacion_venta.marca_id
        return true
      end
    end
    false
  end  
  
  def acumulados
    @concurso = Concurso.find(params[:id])
    @premios = @concurso.concurso_premios
    centro = Centro.find(@concurso.centro)
    @participantes = centro.empleados

    personal_temp = Hash.new    
    @participantes.each do |p|
      personal_temp[p.nombre_completo] = @concurso.copas_vendidas_premios(p.id)
    end
    personal = personal_temp.sort {|a,b| b[1]<=>a[1]}

    ix = 0
    @tabla = Array.new
    @premios.each do |p|
      renglon = Array.new(4)
      renglon[0] = p.lugar
      renglon[1] = p.premio_id
      renglon[2] = personal[ix][0] unless personal[ix].nil?
      renglon[3] = personal[ix][1] unless personal[ix].nil?
      @tabla << renglon
      ix += 1
    end
    
  end
  
  def generar_salida
    @concurso = Concurso.find(params[:id])
    @premios = @concurso.concurso_premios
    @centro = Centro.find(@concurso.centro)
    @participantes = @centro.empleados

    personal_temp = Hash.new    
    @participantes.each do |p|
      personal_temp[p.nombre_completo] = @concurso.copas_vendidas_premios(p.id)
    end
    personal = personal_temp.sort {|a,b| b[1]<=>a[1]}

    ix = 0
    @tabla = Array.new
    @premios.each do |p|
      renglon = Array.new(4)
      renglon[0] = p.lugar
      renglon[1] = p.premio_id
      renglon[2] = personal[ix][0] unless personal[ix].nil?
      renglon[3] = personal[ix][1] unless personal[ix].nil?
      @tabla << renglon
      ix += 1
    end
    
    @tabla.delete_if {|item| item[3] < @concurso.minimo_cumplimiento_tripulacion}

    @salida_material = SalidaMaterial.new
    @salida_material.ejecutivo_id = session[:user]
    @salida_material.centro_id = @centro.id
    @salida_material.observaciones = "Salida de material para entrega de premios del concurso #{@concurso.consecutivo}"
    
    @tabla.each do |t|
      @salida_material.salida_material_detalles << SalidaMaterialDetalle.new(
        :clave => 'N/A', :descripcion => Catalogo.valor('Premios', t[1]),
        :cantidad => 1, :precio => 0.01)
    end
    
  end
  
  def crear_salida
    @concurso = Concurso.find(params[:id])
    @salida_material = SalidaMaterial.new(params[:salida_material])
    @salida_material.ejecutivo_id = session[:user]
    
    if @salida_material.save
      importe = 0.0
      @salida_material.salida_material_detalles.each do |d|
        importe += d.cantidad * d.precio
      
      end unless @salida_material.salida_material_detalles.size == 0
    
      @salida_material.importe = importe
      @salida_material.save!

      flash[:notice] = "La Salida de Material se agrego correctamente."
      
      redirect_to :action => "index", :id => @concurso
    else
      @concurso = Concurso.find(params[:id])
      @premios = @concurso.concurso_premios
      @centro = Centro.find(@concurso.centro)
      @participantes = @centro.empleados
      ejecutivo = Ejecutivo.find(session[:user])    
      
      render :action => "generar_salida", :id => @concurso
    end
    
  end
  
  def lista_participantes
    @concurso = Concurso.find(params[:id])
    @premios = @concurso.concurso_premios
    @centro = Centro.find(@concurso.centro)
    @participantes = @centro.empleados

    personal_temp = Hash.new    
    @participantes.each do |p|
      personal_temp[p.nombre_completo] = @concurso.copas_vendidas_premios(p.id)
    end
    personal = personal_temp.sort {|a,b| b[1]<=>a[1]}

    ix = 0
    @tabla = Array.new
    @premios.each do |p|
      renglon = Array.new(4)
      renglon[0] = p.lugar
      renglon[1] = p.premio_id
      renglon[2] = personal[ix][0] unless personal[ix].nil?
      renglon[3] = personal[ix][1] unless personal[ix].nil?
      @tabla << renglon
      ix += 1
    end

    #@tabla.delete_if {|item| item[3] < @concurso.minimo_cumplimiento_tripulacion}
    @tabla.each do |item|
      if item[3] < @concurso.minimo_cumplimiento_tripulacion
        item[1] = 400
      end
    end

    render :action => "lista_participantes", :layout => false    
  end
end
